package org.source.test;

import java.util.ArrayList;
import java.util.List;

/**
 * 事件管理者(事件通知者)
 * 改造成观察模式，在观察者模式中事件管理者/事件通知者相当于被观察的角色，事件回调的处理类相当于观察者，
 * 观察者是被回调的对象，应该把自己注册到被观察者对象，Java不支持指针，可以通过接口的方式来注册。
 * @author jack
 */
public class EventManager {
	/*
	 * 被观察者对象可以调用regist()方法，将观察者一个一个加入到一个列表上。当有变化时，这个列表可以通知那些观察者对象。
	 * 由于这个列表是私有的，因此被观察者对象对象并不知道观察者对象一直在观察着它们。
	 * */
	private List<EventDefinition> events = new ArrayList<EventDefinition>();
	
    public void regist(EventCallback callMe){
        events.add(callMe);
    }
    public void regist(EventDefinition event){
    	events.add(event);
    }
    
    /*
     * 这个方法被调用时，会回调所有注册过的观察者对象的interestingEvent()方法，使这些观察者对象可以执自己的代码。
     */
    public void doWork(){
        for(EventDefinition event: events) {
            event.interestingEvent("sample event");
        }
    }    

}

